//
//  EZTallyArray.cpp
//  zhaitu
//
//  Created by ellzu on 13-8-3.
//  Copyright (c) 2013年 ellzu. All rights reserved.
//

#include "EZTallyArray.h"
#include <algorithm>

using namespace EZTally;



using namespace EZTally;


EZTallyArray::EZTallyArray()
{
    //    std::cout << "new EZTallyArray" << std::endl;
}

EZTallyArray::~EZTallyArray()
{
    typename std::vector<EZTallyObject*>::iterator it = objects.begin();
    for (; it!=objects.end(); it++) {
        EZTallyObject *o = *it;
        o->Release();
    }
    //    std::cout << "~EZTallyArray" <<std::endl;
}


EZTallyArray::EZTallyArray(const EZTallyArray &other)
{
    //    std::cout << "EZTallyArray other" <<std::endl;
    CopyOther(other);
}


EZTallyArray&  EZTallyArray::operator=(const EZTallyArray &other)
{
    //    std::cout << "EZTallyArray =" <<std::endl;
    CopyOther(other);
    return *this;
}


void EZTallyArray::CopyOther(const EZTallyArray &other)
{
    objects = other.objects;
    typename std::vector<EZTallyObject*>::iterator it = objects.begin();
    for (; it!=objects.end(); it++) {
        EZTallyObject *o = *it;
        o->Retain();
    }
}



void EZTallyArray::AddObject(EZTallyObject* obj)
{
    EZTallyObject *eobj = obj;
    if(eobj==0){
        return ;
    }
    eobj->Retain();
    objects.push_back(obj);
}


void EZTallyArray::RemoveObject(EZTallyObject* obj)
{
    std::vector<EZTallyObject*>::iterator it = objects.begin();
    for (; it !=objects.end(); it++) {
        EZTallyObject *o = *it;
        if ( o==obj) {
            o->Release();
            objects.erase(it);
            it--;
        }
    }
}


void EZTallyArray::RemoveObjectAtIndex(int index)
{
    if(index<0 || index>=Count()){
        return;
    }
    typename std::vector<EZTallyObject*>::iterator it = objects.begin()+index;
    objects.erase(it);
}


void EZTallyArray::Clear()
{
    objects.clear();
}

EZTallyObject* EZTallyArray::ObjectAtIndex(int index)
{
    return objects.at(index);
}


EZTallyObject* EZTallyArray::LastObject()
{
    if(Count()>0){
        return ObjectAtIndex(Count()-1);
    }else{
        return 0;
    }
}



int EZTallyArray::IndexOfObject(EZTallyObject* obj)
{
    int i=0;
    for (; i<(int)objects.size(); i++) {
        EZTallyObject *o = objects.at(i);
        if (o==obj) {
            break;
        }
    }
    if (i == (int)objects.size()) {
        i=-1;
    }
    return i;
}

int EZTallyArray::Count()
{
    return objects.size();
}


